$(function () {

    //统一定义变量暂存组件
    var role_datagrid = $("#role_datagrid");
    var role_dialog = $("#role_dialog");
    var editForm = $("#editForm");
    var role_allPers = $("#role_allPers");
    var role_selfPers = $("#role_selfPers");

    //角色列表初始化
    role_datagrid.datagrid({
        toolbar: "#role_tb",
        fit: true,
        fitColumns: true,
        striped: true,
        url: "/role/list.do",
        pagination: true,
        rownumbers: true,
        singleSelect: true,
        columns: [[
            {field: "cb", checkbox: true},
            {field: "id", hidden: true},
            {field: "name", title: "角色名称", width: 80},
            {field: "sn", title: "角色编码", width: 80}
        ]]
    });
    //end

    //系统权限缓存数据
    var allPers;
    //系统权限的初始化
    role_allPers.datagrid({
        width:245,
        height:330,
        striped: true,
        fitColumns: true,
        url: "/permission/listData.do",
        title:"系统权限",
        rownumbers: true,
        singleSelect: true,
        columns: [[
            {field: "cb", checkbox: true},
            {field: "id", hidden: true},
            {field: "name", title: "权限名称",width: 100, align:"center"}
        ]],
        onDblClickRow:function (index,row) {
            //系统权限删除
            role_allPers.datagrid("deleteRow",index);
            //自身权限添加
            role_selfPers.datagrid("appendRow",row);

        },
        //当数据加载成功时候, 触发该事件
        onLoadSuccess:function (data) {
            //使用深度拷贝, 将data数据跟缓存的allPers分离
            //即使后续进行删除添加也不影响缓存数据
            allPers = $.extend(true, {}, data);

        }
    })
    //自身权限的初始化
    role_selfPers.datagrid({
        width:245,
        height:330,
        striped: true,
        fitColumns: true,
        title:"自身权限",
        rownumbers: true,
        singleSelect: true,
        columns: [[
            {field: "cb", checkbox: true},
            {field: "id", hidden: true},
            {field: "name", title: "权限名称",width: 100, align:"center"}
        ]],
        onDblClickRow:function (index,row) {
            //自身权限删除
            role_selfPers.datagrid("deleteRow",index);
            //系统权限添加
            role_allPers.datagrid("appendRow",row);
        },
        //编辑操作时, 需要对数据进行排重操作
        onLoadSuccess:function (data) {
            //获取到右边的ids集合
            var ids = $.map(data.rows, function (item) {
                return item.id;
            });
            //判断左边的id是否在ids中
            var rows = role_allPers.datagrid("getRows");
            console.log(typeof rows);
           //因为$.each表示for_in操作, 会迭代一些非数组属性, 导致报错使用普通数组迭代
            //注意:使用倒序删除
           for(var i = rows.length-1; i >= 0; i--){
               if($.inArray(rows[i].id, ids) >=0){
                   //在右边ids数组中, 即重复
                   role_allPers.datagrid("deleteRow", i);
                   console.log(i);
               }
           }

        }
    })





    //对话框
    role_dialog.dialog({
        width: 600,
        height: 500,
        closed: true,
        closable: true,
        buttons: "#role_button"
    });
    //end
    
    //方法集合对象
    var cmdObj = {
        //刷新界面
        reload: function () {
            role_datagrid.datagrid("load");
        },
        add:function () {
            //打开弹窗
            role_dialog.dialog("open");
            //设置标题头
            role_dialog.dialog("setTitle", "角色添加");
            //清除表单数据
            editForm.form("clear");
            //清空右边:自身权限
            //加载本地空数据, 进而清空之前残留的数据
            role_selfPers.datagrid("loadData", []);
            //左边数据复原:从缓存中加载全部权限数据
            role_allPers.datagrid("loadData", allPers);

        },

        //编辑操作
        edit:function () {
            //判断是否选择数据
            var row = role_datagrid.datagrid("getSelected");
            if(!row){
                $.messager.alert('温馨提示',"请选择数据");
                return;
            }
            //打开弹窗
            role_dialog.dialog("open");
            //设置标题头
            role_dialog.dialog("setTitle", "角色编辑");

            editForm.form("clear");

            //数据会先
            editForm.form("load", row);

            //左边数据复原:从缓存中加载全部权限数据
            role_allPers.datagrid("loadData", allPers);


            //编辑对话框打开之前, 就应该发起获取当前编辑角色数据拥有的权限
            //如何让datagrid重复发送数据
            //1:加上url,重新加载
            var options = role_selfPers.datagrid("options");
            options.url = "/permission/getPermissionByRoleId.do?id=" + row.id;
            //重新发请求加载数据
            role_selfPers.datagrid("load");
        },
        //角色保存
        save:function () {
            //表单提交url
            var url = "";

            //使用id区分保存于更新操作
            var id = $("#empId").val();
            if(id){
                //编辑
                url = "/role/edit.do";
            }else{
                //添加
                url = "/role/save.do";
            }

            //提交保单
            editForm.form("submit", {
                url: url,
                //添加表单前额外添加参数
                //param 表单已经存在参数
                onSubmit:function (param) {
                    //获取右边的自身权限所有数据
                    var rows = role_selfPers.datagrid("getRows");
                    for(var i = 0; i < rows.length; i++){
                        //拼接权限id
                        param["permissions["+i+"].id"]  = rows[i].id;
                    }
                },
                success:function (data) {
                    //jquery将字符串转换成对象
                    //data前提是标准的json字符串 ""格式
                    data = $.parseJSON(data);
                    if(data.success){
                        //添加成功
                        $.messager.confirm('温馨提示','操作成功',function(ret){
                            //关闭窗口
                            role_dialog.dialog("close");
                            //刷新数据
                            role_datagrid.datagrid("reload");
                        });
                    }else{
                        $.messager.alert('温馨提示',data.msg, "error");
                    }
                }
            });
        },

        //角色删除
        myRemove:function () {
            var row = role_datagrid.datagrid("getSelected");
            if(!row){
                $.messager.alert('温馨提示',"请选择数据");
                return;
            }
            $.messager.confirm('温馨提示','您确认想要删除记录吗？',function(ret){
                if (ret){
                    //确定删除
                    $.get("/role/delete.do?id=" + row.id, function (data) {
                        if(data.success){
                            //删除成功
                            $.messager.confirm('温馨提示','操作成功',function(r){
                                //刷新数据
                                role_datagrid.datagrid("load");
                            });
                        }else{
                            $.messager.alert('温馨提示',data.msg, "error");
                        }
                    });
                }
            });
        },
        //关闭
        cancel:function () {
            role_dialog.dialog("close");
        }
    }


    //给按钮绑定事件
    $("a[data-cmd]").click(function () {
       //cmdObj.reload();
       //cmdObj["reload"]();
       var cmd = $(this).data("cmd");
       cmdObj[cmd]();
    })


});